package com.imooc.handler;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.imooc.entity.Book;

public class SAXParserHandler extends DefaultHandler {
	
	int bookIndex=0;
	String value=null;
	Book book=null;
	private ArrayList<Book> listBook = new ArrayList<Book>();
	
	public ArrayList<Book> getListBook() {
		return listBook;
	}

	/**
	 * 用来遍历xml文件的开始标签
	 * 解析xml元素
	 */
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		//调用 DefaultHandler 类的 startElement 方法
		super.startElement(uri, localName, qName, attributes);
		//开始解析book元素的属性
		if (qName.equals("book")) {
		    book = new Book();
			bookIndex++;
//			//已知book元素下属性的名称，根据属性名称获取属性值
//			String value = attributes.getValue("id");
//			System.out.println("book的属性值是："+value);
			System.out.println("=================下面开始遍历第 "+bookIndex+" 本书的内容=================");
			//不知道book元素下属性的名称以及个数，
			int num = attributes.getLength();
			for (int i = 0; i <num; i++) {
				System.out.print("book元素的第"+(i+1)+"个属性名是："+attributes.getQName(i));
				System.out.println("---属性值是："+attributes.getValue(i));
				
				if (attributes.getQName(i).equals("id")) {
					book.setId(attributes.getValue(i));
				}
				
			}
		}
		else if(!qName.equals("book")&&!qName.equals("bookstore")){
			System.out.print("节点名是："+qName);
		}
		
	}
	
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		super.characters(ch, start, length);
		
		value = new String(ch,start,length);
		if (!value.trim().equals("")) {
			System.out.println("---节点值是："+value);
		}
		
	}
	
	/**
	 * 用来遍历xml文件的结束标签
	 */
	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		//调用 DefaultHandler 类的 endElement 方法
		super.endElement(uri, localName, qName);
		if (qName.equals("book")) {
			listBook.add(book);
			book = null;
			System.out.println("=================结束遍历第 "+bookIndex+" 本书的内容=================");
		}
		else if (qName.equals("name")) {
			book.setName(value);
		}
		else if (qName.equals("author")) {
			book.setAuthor(value);
		}
		else if (qName.equals("year")) {
			book.setYear(value);
		}
		else if (qName.equals("price")) {
			book.setPrice(value);
		}
		else if (qName.equals("language")) {
			book.setLanguage(value);
		}
	}
	
	/**
	 * 用来标识解析开始
	 */
	@Override
	public void startDocument() throws SAXException {
		super.startDocument();
		System.out.println("SAX解析开始");
	}
	
	/**
	 * 用来标识解析结束
	 */
	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
		System.out.println("SAX解析结束");
	}
	
	
	
}















